<?php

// ------------------------------------------------------------------------
// |@Author       : Jarmin <edshop@qq.com>
// |@----------------------------------------------------------------------
// |@Date         : 2025-04-05 21:34:32
// |@----------------------------------------------------------------------
// |@LastEditTime : 2025-04-27 20:44:52
// |@----------------------------------------------------------------------
// |@LastEditors  : Jarmin <jarmin@ladmin.cn>
// |@----------------------------------------------------------------------
// |@Description  : 扩展服务类，用于注册全局中间件和多语言配置
// |@----------------------------------------------------------------------
// |@FilePath     : Extend.php
// |@----------------------------------------------------------------------
// |@Copyright (c) 2025 http://www.ladmin.cn   All rights reserved.
// ------------------------------------------------------------------------
declare (strict_types=1);

namespace think\admin;

use think\Service;
use think\Request;
use think\middleware\LoadLangPack;
use think\admin\extend\StatusExtend;
use think\admin\middleware\ApiVersionMiddleware;
use think\admin\middleware\CorsMiddleware;
use think\admin\middleware\JwtAuthMiddleware;
use think\admin\middleware\MultiAppMiddleware;

/**
 * 扩展服务类
 *
 * 提供以下功能：
 * - 注册全局中间件
 * - 加载多语言文件
 * - 配置404路由处理
 *
 * @package think\admin
 */
class Extend extends Service
{
    /**
     * 服务注册方法
     *
     * 注册以下内容：
     * 1. 中英文语言包
     * 2. CORS跨域中间件
     * 3. API版本控制中间件
     * 4. JWT认证中间件
     * 5. 状态码系统初始化
     */
    public function register()
    {
        // 加载中文语言包
        $this->app->lang->load(__DIR__ . '/lang/zh-cn.php', 'zh-cn');
        // 加载英文语言包
        $this->app->lang->load(__DIR__ . '/lang/en-us.php', 'en-us');
        // 初始化状态码系统
        StatusExtend::init();
    }

    /**
     * 服务启动方法
     *
     * 配置404路由处理
     */
    public function boot()
    {
        $this->app->event->listen('HttpRun', function (Request $request) {
            // 添加全局中间件
            $this->app->middleware->add(MultiAppMiddleware::class); // 多应用支持
            $this->app->middleware->add(CorsMiddleware::class); // CORS跨域支持
            $this->app->middleware->add(ApiVersionMiddleware::class, 'route'); // API版本控制
            $this->app->middleware->add(JwtAuthMiddleware::class, 'route'); // JWT认证
            $this->app->middleware->add(LoadLangPack::class); // 语言包加载
            $this->app->route->miss(fn () => throw_response(404, lang('request.api_not_found'))); // 配置未匹配路由的处理方式
        });
    }
}
